// 从 localStorage 获取 token
let token = localStorage.getItem('token');

// 创建 axios 实例
const instance = axios.create({
    baseURL: '/admin', // 设置基础URL
    timeout: 60000,   // 设置超时时间
});

// 如果有 token，自动添加到请求头
if (token) {
    instance.defaults.headers.common['Authorization'] = 'Bearer ' + token;
}

// ❗ 添加：响应拦截器（关键！用于统一提示）
instance.interceptors.response.use(
    // 成功响应（HTTP 状态码 2xx）
    function (response) {
        console.log('响应成功：', response);
        if (response.status !== 200){
             ELEMENT.Message.error('请求失败：' + response.status);
            return Promise.reject(new Error('请求失败'));
        }
        const res = response.data;
        return res;
        // 假设后端返回格式：{ code: 0, msg: '', data: {} }
        // 如果 code 不是 0，说明是业务错误（如 403、401 等）
        if (res.code !== undefined && res.code !== 0) {
            const msg = res.msg || '请求失败';

            // 根据 code 做不同处理
            if (res.code === 401) {
                  ELEMENT.Message.error('登录已过期，请重新登录');
                localStorage.removeItem('token');
                window.location.href = '/admin/login';
            } else if (res.code === 403) {
                  ELEMENT.Message.error('您没有权限访问：' + msg);
                console.warn('权限不足:', response.config.url);
            } else if (res.code === 500) {
                  ELEMENT.Message.error('服务器内部错误，请联系管理员');
                console.warn('权限不足:', response.config.url);
            } else {
                 ELEMENT.Message.error(msg);
            }

            // 抛出错误，进入 .catch
            return Promise.reject(new Error(msg));
        }

        // ✅ 业务成功，返回 res（即 response.data）
        return res;
    },

    // 失败响应（HTTP 状态码非 2xx，如 403、500、网络错误等）
    function (error) {
        const {response, request} = error;

        if (response) {
            // 服务器返回了响应（比如 403、500）
            const {status, data} = response;
            const msg = data?.msg || data?.message || '请求异常';

            switch (status) {
                case 401:
                      ELEMENT.Message.error('未登录或登录已过期');
                    localStorage.removeItem('token');
                    window.location.href = '/admin/login';
                    break;

                case 403:
                      ELEMENT.Message.error('拒绝访问：您没有权限操作此项');
                    break;

                case 404:
                      ELEMENT.Message.error('请求的资源不存在');
                    break;

                case 500:
                     ELEMENT.Message.error('服务器内部错误，请联系管理员');
                    break;

                default:
                      ELEMENT.Message.error(`请求失败：${status} ${msg}`);
            }
        } else if (request) {
            // 请求已发出，但无响应（如断网）
              ELEMENT.Message.error('网络连接失败，请检查网络是否正常');
        } else {
            // 其他错误
              ELEMENT.Message.error('请求异常：' + error.message);
        }

        // 抛出错误，进入 .catch
        return Promise.reject(error);
    }
);

// 封装 GET 请求
function get(url, params) {
    return new Promise((resolve, reject) => {
        instance.get(url, {params})
            .then(response => {
                // 响应拦截器已处理错误，这里只返回成功数据
                resolve(response);
            })
            .catch(error => {
                reject(error);
            });
    });
}

// 封装 POST 请求
function post(url, data) {
    return new Promise((resolve, reject) => {
        instance.post(url, data)
            .then(response => {
                resolve(response);
            })
            .catch(error => {
                reject(error);
            });
    });
}

// 封装 PUT 请求
function put(url, data) {
    return new Promise((resolve, reject) => {
        instance.put(url, data)
            .then(response => {
                resolve(response);
            })
            .catch(error => {
                reject(error);
            });
    });
}

// 封装 DELETE 请求
function del(url, params) {
    return new Promise((resolve, reject) => {
        instance.delete(url, {params})
            .then(response => {
                resolve(response);
            })
            .catch(error => {
                reject(error);
            });
    });
}

// 💡 使用提示：
// 所有请求如果失败（如 403、401），都会自动弹窗提示
// 你只需要在 .catch 中处理“业务失败后的逻辑”（比如关闭 loading），不需要再弹提示
